import datetime
import re

from openpyxl import load_workbook


def bm_deal(file, file_col):
    wb_col = load_workbook(file_col)
    sheet_col = wb_col.worksheets[0]
    # 获取最大行
    col_row_max = sheet_col.max_row
    # 大类分类，内容为地市区县
    ds = '鄞州区大数据局'
    # 编目部门
    bmbm = '区退役军人事务所'
    # 信息资源提供方
    xxtgf = '国防部'
    # 信息资源内部提供方
    xxnbtgf = '区退役军人事务所'
    # 信息资源提供方代码（默认1即可）
    xxtgfdm = '1'
    # 信息资源格式
    xxzygs = '数据库'
    # 信息资源格式类型
    xxzygslx = 'MySQL'
    # 数据类型映射
    type_dict = {'string': '字符串型 C', 'decimal': '数值型 N'
        , 'bigint': '整型 I', 'timestamp': '日期时间型 T', 'double': '双精度型 B'
        , 'boolean': '逻辑型 L'}
    # 数据长度（默认255）
    sjcd = 255
    # 共享类型
    gxlx = '有条件共享'
    # 共享条件
    gxtj = '无'
    # 共享方式分类
    gxfsfl = '共享平台方式'
    # 共享方式类型
    gxgslx = '数据库'
    # 是否向社会开放
    sfkf = '否'
    # 更新周期
    gxzq = '每周'
    # 发布日期
    fbrq = datetime.datetime.now().strftime('%Y/%m/%d')
    wb = load_workbook(file)
    sheet = wb["fullcategory"]
    for i in range(4, col_row_max + 3):
        # 1信息大类
        sheet.cell(i, 1, ds)
        # 2编码部门
        sheet.cell(i, 2, bmbm)
        # 17信息资源名称
        sheet.cell(i, 17, sheet_col.cell(i - 2, 2).value)
        # 18信息资源英文名称（需去掉ODS）
        xxzyywmc = sheet_col.cell(i - 2, 1).value
        xxzyywmc = xxzyywmc.replace('ods_', '')
        sheet.cell(i, 18, xxzyywmc)
        # 20信息资源提供方
        sheet.cell(i, 20, xxtgf)
        # 21信息资源内部提供方
        sheet.cell(i, 21, xxnbtgf)
        # 22信息资源提供方代码
        sheet.cell(i, 22, xxtgfdm)
        # 23信息提供方摘要（同信息资源名称即可）
        sheet.cell(i, 23, sheet_col.cell(i - 2, 2).value)
        # 24信息资源格式
        sheet.cell(i, 24, xxzygs)
        # 25信息资源格式类型
        sheet.cell(i, 25, xxzygslx)
        # 33和34,信息项名称（字段中文名）、信息项英文名称（字段英文名）
        sheet.cell(i, 33, sheet_col.cell(i - 2, 4).value)
        sheet.cell(i, 34, sheet_col.cell(i - 2, 3).value)
        # 35数据类型
        row_sjlx = sheet_col.cell(i - 2, 5).value
        # 将decimal(10,2)等带括号的转为decimal
        k_sjlx = re.sub(u"\\(.*?\\)", "", row_sjlx)
        # 如无匹配，返回默认字符串类型
        v_sjlx = type_dict.get(k_sjlx, '字符串型 C')
        sheet.cell(i, 35, v_sjlx)
        # 36数据长度
        sheet.cell(i, 36, sjcd)
        # 37描述（同信息项名称）
        sheet.cell(i, 37, sheet_col.cell(i - 2, 4).value)
        # 38共享类型
        sheet.cell(i, 38, gxlx)
        # 39共享条件
        sheet.cell(i, 39, gxtj)
        # 40共享方式分类
        sheet.cell(i, 40, gxfsfl)
        # 41共享方式类型
        sheet.cell(i, 41, gxgslx)
        # 42是否向社会开放
        sheet.cell(i, 42, sfkf)
        # 44更新周期
        sheet.cell(i, 44, gxzq)
        # 45发布日期
        sheet.cell(i, 45, fbrq)
    wb.save(file)


if __name__ == '__main__':
    # 编目输出文件，需要模板前3行头部
    file_target = r'C:\Users\shumei\Desktop\tyjr_bm0330.xlsx'
    # 需要编目的字段清单（表名称，表中文名称，字段名称，字段中文名称，字段类型）
    file_source = r'C:\Users\shumei\Desktop\退役军人字段清单.xlsx'
    bm_deal(file_target, file_source)
    print('SUCCESS!')
